home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1996 / MacHack 1996.toast / Hacks / Hacks '96 / Hungry Homer / CW Source / SpriteHanders.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-06-22  |  5.2 KB  |  230 lines  |  [TEXT/MMCC]

  1. #include "SpriteTools.h"
  2. #include <AppleEvents.h>
  3. #include <Shutdown.h>
  4. #define Max    2
  5. #define    oMax -2
  6. #define classCode 'GURL'
  7. #define eventID 'GURL'
  8. #define NetscapeID 'MOSS'
  9. #define homerKind         1
  10. #define joltKind         2
  11. #define rurlKind         3
  12. #define plungerKind     4
  13. #define appleKind         5
  14. #define microsoftKind     6
  15.  
  16.  
  17.  
  18. void    DoURL(SpritePtr whichSprite);
  19. extern Boolean killed;
  20.  
  21. Str255    url;
  22. GrafPtr    homerFace, appleFace, randomFace, microsoftFace, joltFace, plungerFace;
  23. Str255 gURL, myURL;
  24.  
  25. short    Multiple;
  26. Boolean    Dead = false;
  27.  
  28. void MoveSprite(SpritePtr theSprite)
  29. {
  30.     EventRecord        theEvent;
  31.     char            temp;
  32.     if(theSprite->face == homerFace)
  33.     {
  34.         if(GetOSEvent(keyDownMask + autoKeyMask, &theEvent))
  35.         {
  36.             temp = (char)BitAnd(theEvent.message, charCodeMask);
  37.             switch (temp)
  38.             {
  39.                 case '4':
  40.                     theSprite->speed.h += -1;
  41.                     if(theSprite->speed.h < -1)
  42.                     {
  43.                         theSprite->speed.h = -1;
  44.                     }
  45.                 break;
  46.                 
  47.                 case '6':
  48.                     theSprite->speed.h += 1;
  49.                     if(theSprite->speed.h > 1)
  50.                     {
  51.                         theSprite->speed.h = 1;
  52.                     }
  53.                 break;
  54.                 
  55.                 case '8':
  56.                     theSprite->speed.v += -1;
  57.                     if(theSprite->speed.v < -1)
  58.                     {
  59.                         theSprite->speed.v = -1;
  60.                     }
  61.                 break;
  62.                 
  63.                 case '2':                
  64.                     theSprite->speed.v += 1;
  65.                     if(theSprite->speed.v > 1)
  66.                     {
  67.                         theSprite->speed.v = 1;
  68.                     }
  69.                 break;
  70.             }
  71.         }
  72.     }
  73.     
  74.     theSprite->position.h += theSprite->speed.h;
  75.     theSprite->position.v += theSprite->speed.v;
  76.     KeepOnScreen(theSprite);
  77.  
  78. }
  79.  
  80. void HitSprite(SpritePtr theSprite, SpritePtr anotherSprite)
  81. {        
  82.         if (anotherSprite->kind == homerKind)
  83.         {    
  84.             theSprite->face = nil;
  85.             CopyBits(&gOffScreen->portBits, &myWindow->portBits, &theSprite->drawingRect, &theSprite->drawingRect, srcCopy, nil);
  86.             DoURL(theSprite);
  87.             DisposeSprite(theSprite);
  88.             //DoNewFood();
  89.             
  90.         }
  91.         if (theSprite->kind == homerKind)
  92.         {    
  93.             theSprite->face = nil;
  94.             CopyBits(&gOffScreen->portBits, &myWindow->portBits, &theSprite->drawingRect, &theSprite->drawingRect, srcCopy, nil);
  95.             DoURL(anotherSprite);
  96.             DisposeSprite(anotherSprite);
  97.             //DoNewFood();
  98.             
  99.         }
  100.         if (theSprite->kind != homerKind && anotherSprite->kind != homerKind)
  101.         {
  102.             
  103.         }
  104. }
  105.  
  106. void    DoURL(SpritePtr whichSprite)
  107. {
  108.     short    crap;
  109.     OSErr    err;
  110.     long             targetSig = 'MOSS',finderSig = 'MACS';
  111.     AEAddressDesc    targetAddrDesc = {typeNull, nil},finderAddressDesc = {typeNull,NULL};
  112.     AppleEvent        event = {typeNull, nil}, shutEvent = {typeNull,NULL};
  113.     AppleEvent        reply = {typeNull, nil}, shutReply = {typeNull,NULL};
  114. //    AEKeyword        theKeyWord;
  115.     AEDesc             myDesc;
  116.  
  117.     switch(whichSprite->kind)
  118.     {
  119.         case joltKind:
  120.             GetIndString(url,128,4);
  121.         break;
  122.         
  123.         case rurlKind:
  124.             crap = Rand(40);
  125.             GetIndString(url,129,crap);
  126.         break;
  127.         
  128.         case plungerKind:
  129.             GetIndString(url,128,1);
  130.         break;
  131.         
  132.         case appleKind:
  133.             GetIndString(url,128,2);
  134.         break;
  135.         
  136.         case microsoftKind:
  137.             killed = true;
  138.             ShutDwnPower();
  139.             return;
  140.         break;
  141.     }
  142.     killed = true;
  143.  
  144.     err = AECreateDesc(typeApplSignature,
  145.         (Ptr)(&targetSig), sizeof (targetSig), &targetAddrDesc);
  146.     err = AECreateAppleEvent('GURL', 'GURL', &targetAddrDesc,
  147.         kAutoGenerateReturnID, kAnyTransactionID, &event);
  148.     err = AEPutKeyPtr(&event, keyDirectObject, typeChar,
  149.          &url[1], url[0]);
  150.     err = AESend(&event, &reply, kAENoReply, kAEHighPriority,
  151.          kAEDefaultTimeout, NULL, NULL);
  152.     /*     
  153.     if (err == -609)
  154.     {
  155.         err = AECreateDesc(typeApplSignature,
  156.             (Ptr)(&targetSig), sizeof (finderSig), &finderAddressDesc);
  157.         err = AECreateAppleEvent('GURL', 'GURL', &tfinderAddressDesc,
  158.             kAutoGenerateReturnID, kAnyTransactionID, &event);
  159.         err = AEPutKeyPtr(&event, keyDirectObject, typeChar,
  160.              &url[1], url[0]);
  161.         err = AESend(&event, &reply, kAENoReply, kAEHighPriority,
  162.              kAEDefaultTimeout, NULL, NULL);*/
  163.     
  164. }
  165. void InitSprites()
  166. {
  167.     SpritePtr    theSprite;
  168.  
  169.     homerFace = LoadFaceFromCicn(128);
  170.     joltFace = LoadFaceFromCicn(129);
  171.     randomFace = LoadFaceFromCicn(130);
  172.     plungerFace = LoadFaceFromCicn(131);
  173.     appleFace = LoadFaceFromCicn(132);
  174.     microsoftFace = LoadFaceFromCicn(133);
  175.     theSprite = NewSprite();
  176.     theSprite->face = homerFace;
  177.     SetPt(&theSprite->position, Rand(425), Rand(325));
  178.     SetPt(&theSprite->speed, 0, 0);
  179.     theSprite->kind = homerKind;
  180.     DoNewFood();
  181.     DoNewFood();
  182. }
  183.  
  184. void    DoNewFood()
  185. {
  186.     SpritePtr    theSprite;
  187.     short        number;
  188.     
  189.     number = Rand(10);
  190.     if(number == 0)
  191.     {
  192.         theSprite = NewSprite();
  193.         theSprite->face = joltFace;
  194.         SetPt(&theSprite->position, Rand(425), Rand(325));
  195.         SetPt(&theSprite->speed, Rand(1+3), Rand(1+3));
  196.         theSprite->kind = joltKind;
  197.     }
  198.     if(number == 1)
  199.     {
  200.         theSprite = NewSprite();
  201.         theSprite->face = plungerFace;
  202.         SetPt(&theSprite->position, Rand(425), Rand(325));
  203.         SetPt(&theSprite->speed, Rand(1+3), Rand(1+3));
  204.         theSprite->kind = plungerKind;
  205.     }
  206.     if(number == 2)
  207.     {
  208.         theSprite = NewSprite();
  209.         theSprite->face = appleFace;
  210.         SetPt(&theSprite->position, Rand(425), Rand(325));
  211.         SetPt(&theSprite->speed, Rand(1+3), Rand(1+3));
  212.         theSprite->kind = appleKind;
  213.     }
  214.     if(number == 3 || number == 4)
  215.     {
  216.         theSprite = NewSprite();
  217.         theSprite->face = microsoftFace;
  218.         SetPt(&theSprite->position, Rand(425), Rand(325));
  219.         SetPt(&theSprite->speed, .5, 5.);
  220.         theSprite->kind = microsoftKind;
  221.     }
  222.     if(number > 4)
  223.     {
  224.         theSprite = NewSprite();
  225.         theSprite->face = randomFace;
  226.         SetPt(&theSprite->position, Rand(425), Rand(325));
  227.         SetPt(&theSprite->speed, Rand(1+3), Rand(1+3));
  228.         theSprite->kind = rurlKind;
  229.     }
  230. }